public class Code2 {
    // 不同路径2 (包含障碍物)
    public int uniquePathsWithObstacles(int[][] ob) {
        // 1、创建 dp 表
        // 2、初始化
        // 3、填表
        // 4、填写返回值

        // 获取到当前矩阵的大小
        int m = ob.length;
        int n = ob[0].length;

        int[][] dp = new int[m + 1][n + 1];
        // 初始化操作
        dp[1][0] = 1;
        for(int i = 1; i <= m; i++){
            for(int j = 1; j <= n; j++){
                // 在填表的时候这里需要注意分为 有障碍物和无障碍物
                // 有障碍物时，此时在 dp 表的该位置为 0 (创建之初就已经是 0 了)
                // 此时要判断的是 ob 表中的位置要和 dp 表中的位置对应
                if(ob[i-1][j-1]==0){
                    // 根据对应位置填写 dp 表
                    dp[i][j] = dp[i - 1][j] + dp[i][j-1];
                }
                //当有障碍物时，题中所给的 矩阵 中包含的是 1
            }
        }
        // 直接返回右下角处的值即可
        return dp[m][n];
    }
}
